package com.ljr.demo;


import com.ljr.bean.User;

import java.sql.*;

/**
 * 原始JDBC
 * 存在的问题
 * 1，数据库连接会频繁的创建和销毁
 * 2，需要手动拼接输入参数
 * 3，需要手动处理结果集
 * 4，需要手动释放资源
 * 5，driverClass、jdbcUrl、username、password四个参数存在硬编码
 *
 * 解决方案
 * 1，引入连接池
 * 2，使用反射完成内省操作
 * 3，使用反射完成内省操作
 * 4，编写通用方法
 * 5，将四个参数存储到配置文件
 *
 *
 */
public class Demo01 {


    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            //1,加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2,获取连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_demo", "root", "root");
            //3,获取执行sql对象
            statement = connection.prepareStatement("select * from tb_user where id = ?");
            statement.setInt(1, 1);
            //4,执行sql
            resultSet = statement.executeQuery();
            //5,处理结果集
            User user = null;
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String username = resultSet.getString("username");
                String password = resultSet.getString("password");

                user = new User(id, username, password);
            }
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5,释放资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
                connection = null;
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
                statement = null;
            }

            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
                resultSet = null;
            }
        }


    }

}
